package at.ac.tuwien.ifs.calendit.basis.gui;

import java.util.List;
import java.util.Vector;

import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;

import at.ac.tuwien.ifs.calendit.basis.helper.Constants;
import at.ac.tuwien.ifs.calendit.dao.IAbteilung;
import at.ac.tuwien.ifs.calendit.dao.IMitarbeiter;
import at.ac.tuwien.ifs.calendit.domain.Abteilung;
import at.ac.tuwien.ifs.calendit.domain.Mitarbeiter;

public class AbteilungsverwaltungLogic {
	private IMitarbeiter ma;
	private IAbteilung abt;

	/**
	 * The XML Bean Factory from Spring.
	 */
	private XmlBeanFactory xbf;
	
	public AbteilungsverwaltungLogic(){
		ClassPathResource res = new ClassPathResource(Constants.SPRINGBEANS);
		xbf = new XmlBeanFactory(res);
		ma = (IMitarbeiter) xbf.getBean("MitarbeiterDAO");
		abt = (IAbteilung) xbf.getBean("AbteilungDAO");
	}

	public int getMAidByName(String vor_nach_name) {
		String[] name = vor_nach_name.split(" ");
		Mitarbeiter mitarb = ma.getMitarbeiterByName(name[0], name[1]);
		return mitarb.getId();
	}

	public Vector<String> getAllMitarbeiterNames() {
		List<Mitarbeiter> allMA = ma.getMitarbeiters("ID");
		Vector<String> names = new Vector<String>();
		Mitarbeiter tmp;
		for (int i=0; i<allMA.size(); i++){
			tmp = allMA.get(i);
			String name = tmp.getVname() + " " + tmp.getNname();
			names.add(i, name);
		}
		return names;
	}
	
	public boolean updateAbteilung(String bez, String abtleitername){
		int id = getMAidByName(abtleitername);
		boolean update = false;
		Abteilung a = new Abteilung(bez, id);
		if (abt.update(a)!= null) update = true;
		return update;
	}
	
	public boolean checkFieldsFilled(String bez, String name){
		boolean filled = true;
		if (bez.equals("") || name.equals("")) filled = false;
		return filled;
	}
	
	public boolean checkAbteilungExists(String bez){
		boolean exists = false;
		List <Abteilung> allAbt = abt.getAbteilungen();
		Abteilung tmp;
		for (int i = 0; i <allAbt.size(); i++){
			tmp = allAbt.get(i);
			if (tmp.getBezeichnung().equals(bez)){
				exists = true;
			}
		}
		return exists;
	}
	
	public boolean createAbteilung(String bez, String name){
		boolean create = false;
		Abteilung a =new Abteilung(bez, getMAidByName(name));
		if (abt.add(a) != null) create = true;
		return create;
	}
	
	public boolean deleteAbteilung(String bez){
		boolean del = false;
		if (abt.delete(bez)) {
			del = true;
		}
		return del;
	}
	
	public int updateMA(String bez){
		return ma.updateMitarbeiterAbteilung(bez);
	}
}
